From c0693d2c6e8800a274b280220254c42eafd2aecd Mon Sep 17 00:00:00 2001 From: "emellor@leeni.uk.xensource.com" Date: Tue, 4 Apr 2006 11:08:20 +0100 Subject: [PATCH] Workaround bug in xmlrpclib's string escaping. That library outputs invalid UTF-8 if given a string containing high-bit characters, so instead pass in Unicode strings, for which the escaping is correct. This fixes a bug seen when the dmesg of a machine contains high bit characters, but I'm sure there are other ways in which it might be triggered. Signed-off-by: Ewan Mellor --- tools/python/xen/util/xmlrpclib2.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/python/xen/util/xmlrpclib2.py b/tools/python/xen/util/xmlrpclib2.py index c0f769f6f2..65aa49ced5 100644 --- a/tools/python/xen/util/xmlrpclib2.py +++ b/tools/python/xen/util/xmlrpclib2.py @@ -20,6 +20,8 @@ An enhanced XML-RPC client/server interface for Python. """ +import types + from httplib import HTTPConnection, HTTP from xmlrpclib import Transport from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler @@ -77,6 +79,15 @@ class TCPXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer): else: response = self._dispatch(method, params) + # Convert strings to unicode strings so that they are escaped + # properly by xmlrpclib. We use latin-1 here, but any + # ASCII-compatible scheme would do -- we just care about getting + # the bytes across the wire. + # Any message handler that actually cares about the charset in + # use should be returning Unicode strings. + if isinstance(response, types.StringType): + response = unicode(response, 'iso-8859-1') + response = (response,) response = xmlrpclib.dumps(response, methodresponse=1, -- 2.30.2